0%

kubernetes 安装---单节点安装

kubernetes 安装—单节点安装

多块网卡安装 kubernetes 请先看多网卡问题

前提条件

Ubuntu Linux 或者 CentOS

安装步骤

  1. 参考 基础环境准备

  2. 主节点配置

    1
    2
    3
    4
    kubeadm init \
    --pod-network-cidr=192.168.0.0/16 \
    --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    --ignore-preflight-errors=NumCPU

    这里使用的网络方案为 Calico 因此 --pod-network-cidr 等于 192.168.0.0/16 更多网络方案点击这里这里

    如果计算机 CPU 只有一个,需要加参数来忽略错误 –ignore-preflight-errors=NumCPU

    可以通过 –kubernetes-version 指定要安装的 kubernetes 版本,比如 –kubernetes-version v1.14.1

    如果没有先拉取启动所需要的镜像,那么因为网络关系,需要指定拉取镜像的仓库地址,需要追加参数 –image-repository,比如 –image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

    kubernetes 从 1.10 开始没有开放 10255 端口用于监控,如果需要监控需要配置

    1
    2
    3
    >   echo 'readOnlyPort: 10255' >> /var/lib/kubelet/config.yaml
    > systemctl restart kubelet
    >

    按照 kubeadm 的要求设置

    1
    2
    3
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    安装网络插件

    1
    2
    kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

    master 节点参与调度(多节点可选,单节点必选)

    kubeadm 安装的 kubernetes 环境默认情况下 Master 节点不会参与调度,想要让 Master 节点参与调度需要使用下面命令

    1
    kubectl taint nodes --all node-role.kubernetes.io/master-

    或者通过节点名称让 Master 不参与调度

    1
    2
    > kubectl taint nodes <master-node-name> node-role.kubernetes.io/master=:NoSchedule
    >
  3. 加入集群(可选)

    将一个节点加入集群需要进行基础环境准备,之后使用下面命令将节点添加到集群

    1
    kubeadm join <master-ip> --token <join-token> --discovery-token-unsafe-skip-ca-verification

    <master-ip> Kubernetes 集群 master 节点所在的 ip 地址,例如: 192.168.17.139:6443

    <join-token> 为加入 Kubernetes 集群所需要的 token,可以通过 kubeadm token list 查看,如果没有,可以通过 kubeadm token create 创建 token

  4. 额外配置(可选)

    上述安装配置无法对集权状态进行监控,如需监控功能需要将 10255 端口添加到配置文件,设置方式如下。配置文件在 kubeadm initkubeadm join 命令生效后生成,使用 kubeadm reset 之后该文件会被删除。

    1
    2
    echo 'readOnlyPort: 10255' >> /var/lib/kubelet/config.yaml
    systemctl restart kubelet

多网卡问题

实验环境最好不要使用多网卡机器,容易出现各种问题

  1. 安装 kubernetes

    安装步骤-> 2. 主节点配置中使用 kubeadm init 来安装 kubernetes,在安装过程中,kubeadm 会自动寻找可用的网卡做为 kubernetes 的服务 ip。如果计算机存在多张网卡,那么有可能选择的网卡并不是预期的网卡。为了解决这个问题,kubeadm 提供了 --apiserver-advertise-address 参数来指定网卡的 ip,完整命令如下:

    1
    kubeadm init --apiserver-advertise-address <targetIP> --pod-network-cidr=192.168.0.0/16

    –pod-network-cidr=192.168.0.0/16 为 calico 网络插件指定的网段

    对于想要加入 kubernetes 集群的节点来,如果有多网卡,也可以使用该参数来指定加入的网卡

    1
    kubeadm join <k8s-master-ip> --token <token> --apiserver-advertise-address <targetIP>
  2. 网络插件选择网卡

    除了 kubernetes 以外,网络插件也需要选择网卡来保证节点间容器的通信,不同的网络插件对于网卡的选择不同,具体请查看实际网络插件的文档。这里以 calico 网络插件为例。calico 官方文档

    calico 对于网卡的选择使用的默认策略是 first-found,也就是第一块找到的可用的网卡,如果每个节点选择的网卡对应的 ip 不在同一网段,那么很可能出现某一节点上的 pod ping 不通另一节点上的 pod。

    对于这种情况,可以根据不同方式来自行选择网卡,这里使用的网卡选择策略是 interface,根据正则表达式来选择网卡,不同的网卡选择策略还是看calico 官方文档

    kube-system 命令空间下,找到 守护进程集(daemonse) calico-node,其中包含两个 container,为 calico-node container 增加两个环境变量 IP_AUTODETECTION_METHODIP6_AUTODETECTION_METHOD,值为 interface=eth0。保存即可,和下面类似

    1
    2
    3
    4
    5
    6
    7
    env:
    ....
    - name: IP_AUTODETECTION_METHOD
    value: interface=eth0
    - name: IP6_AUTODETECTION_METHOD
    value: interface=eth0
    ....

    这个环境变量的意思是 calico 选择网卡,根据正则表达式去匹配每个节点上网卡名称,找到的第一个网卡就作为 pod 通信的网卡。这里要选择的网卡就是包含 eht0 的网卡。

    与此相反,可以使用 skip-interface 来进行配置要跳过哪些网卡

附录

calico 安装指南